#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL;
namespace Cephei.QL.Experimental.Credit
{
     // <summary> 
	// ! The copula model \f[ Y_i = a_i\,M+\sqrt{1-a_i^2}\:Z_i \f]  is specified here by setting the probability density functions for \f$ Z_i \f$ (\f$ D_Z \f$) and \f$ M \f$ (\f$ D_M \f$) to Student t-distributions with \f$ N_z \f$ and \f$ N_m \f$ degrees of freedom, respectively.  The variance of the Student t-distribution with \f$ \nu \f$ degrees of freedom is \f$ \nu / (\nu - 2) \f$. Since the copula approach requires zero mean and unit variance distributions, variables \f$ Z \f$ and \f$ M \f$ are scaled by \f$ \sqrt{(N_z - 2) / N_z} \f$ and \f$ \sqrt{(N_m - 2) / N_m}, \f$ respectively.  \todo Improve performance/accuracy of the calculation of inverse cumulative Y. Tabulate and store it for selected correlations?
	// </summary>
    [Guid ("602417C3-4829-4a8c-8D86-1B50560B5C8D"),ComVisible(true)]
	public interface IOneFactorStudentCopula : Cephei.QL.Experimental.Credit.IOneFactorCopula
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double CumulativeZ(Double z);
        
		 Double Density(Double m);
    }

    // <summary> 
	// ! The copula model \f[ Y_i = a_i\,M+\sqrt{1-a_i^2}\:Z_i \f]  is specified here by setting the probability density functions for \f$ Z_i \f$ (\f$ D_Z \f$) and \f$ M \f$ (\f$ D_M \f$) to Student t-distributions with \f$ N_z \f$ and \f$ N_m \f$ degrees of freedom, respectively.  The variance of the Student t-distribution with \f$ \nu \f$ degrees of freedom is \f$ \nu / (\nu - 2) \f$. Since the copula approach requires zero mean and unit variance distributions, variables \f$ Z \f$ and \f$ M \f$ are scaled by \f$ \sqrt{(N_z - 2) / N_z} \f$ and \f$ \sqrt{(N_m - 2) / N_m}, \f$ respectively.  \todo Improve performance/accuracy of the calculation of inverse cumulative Y. Tabulate and store it for selected correlations? Factory
	// </summary>
   	[ComVisible(true)]
    public interface IOneFactorStudentCopula_Factory // : Collection_Factory<IOneFactorStudentCopula, ICell<IOneFactorStudentCopula>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        // <summary> 
		// -------------------------------------------------------------------------
		// </summary>
	    IOneFactorStudentCopula Create (Cephei.QL.IQuote correlation, Int32 nz, Int32 nm, Microsoft.FSharp.Core.FSharpOption<Double> maximum, Microsoft.FSharp.Core.FSharpOption<UInt64> integrationSteps);
    }
}

